﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using RiskMan.DataClass.Models.Gilevskiy;
using RiskMan.Views.Dialogs;

namespace RiskMan.Views.Gilevskiy
{
    /// <summary>
    /// Interaction logic for AddNewTimeFrame.xaml
    /// </summary>
    public partial class AddNewTimeFrame : Window
    {
        private TimeFrameItem timeFrameItem;
        private DataClass.Data data;
        public AddNewTimeFrame(TimeFrameItem item, DataClass.Data data)
        {
            InitializeComponent();
            timeFrameItem = item;
            this.data = data;


            #region Seccode
            CmbxInstrument.ItemsSource = data.GetSeccodeList();
            for (int i = 0; i < CmbxInstrument.Items.Count; i++)
            {
                if (CmbxInstrument.Items[i].ToString() == timeFrameItem.Instrument)
                    CmbxInstrument.SelectedIndex = i;
            }
            #endregion

            TxbxTimeFrame.Text = timeFrameItem.TimeFrame.ToString();
            TxbxComment.Text = timeFrameItem.Comment;
        }

        private void ButtonAccept_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                if (CmbxInstrument.SelectedIndex >= 0)
                    if (CmbxInstrument.SelectedValue.ToString() != "Не выбран")
                        timeFrameItem.Instrument = CmbxInstrument.SelectedValue.ToString();
                    else
                    {
                        new DialogOkCancel("Выберите торгуемый инструмент!", "Ошибка добавления");
                        return;
                    }
                else
                {
                    new DialogOkCancel("Выберите торгуемый инструмент!", "Ошибка добавления");
                    return;
                }
                timeFrameItem.TimeFrame = Convert.ToInt32(TxbxTimeFrame.Text);
                if (timeFrameItem.TimeFrame <= 0)
                {
                    new DialogOkCancel("ТаймФрейм не может быть равен или меньше нуля", "Ошибка добавления");
                    return;
                }

                timeFrameItem.Comment = TxbxComment.Text;
                timeFrameItem.GuidItem = Guid.NewGuid();
                timeFrameItem.CandleItems = new ObservableCollection<CandleItem>();

                if (timeFrameItem.TimeFrame > 1)
                {
                    if (
                        data.TimeFrameItems.Where(a => a.Instrument == timeFrameItem.Instrument)
                            .Count(a => a.TimeFrame == 1) == 0)
                    {
                        new DialogOkCancel("Для ускорения обработки таймфремов будет создан 1 минутный таймфрейм", "Оповещение");
                        data.TimeFrameItems.Add(new TimeFrameItem() {Instrument = timeFrameItem.Instrument, Comment = "Автоматически созданный", CandleItems = new ObservableCollection<CandleItem>(), GuidItem = Guid.NewGuid(), TimeFrame = 1}) ;
                    }

                }
                this.DialogResult = true;
                Close();
            }
            catch
            { }
        }

        private void ButtonCancel_Click(object sender, RoutedEventArgs e)
        {
            DialogResult = false;
            Close();
        }

        #region Обработка получение текстобксом фокуса и потери его, замена запятой на точку

        private void TxbxLostFocus(object sender, RoutedEventArgs e)
        {
            if (((TextBox)sender).Text == "")
                ((TextBox)sender).Text = 0.ToString();

            char pointChar = ',';
            string str = (1.2).ToString();
            if (str.IndexOf('.') > 0) pointChar = '.';

            if (pointChar == ',')
                ((TextBox)sender).Text = ((TextBox)sender).Text.Replace('.', pointChar);

            if (pointChar == '.')
                ((TextBox)sender).Text = ((TextBox)sender).Text.Replace(',', pointChar);


        }

        private void TxbxGotFocus(object sender, RoutedEventArgs e)
        {
            try
            {
                if (((TextBox)sender).Text != "")
                {
                    if (Convert.ToDouble(((TextBox)sender).Text) == 0)
                    {
                        ((TextBox)sender).Text = "";
                    }
                }
            }
            catch
            {
                ((TextBox)sender).Text = "";
            }
        }

        private void TxbxPreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if (!Char.IsDigit(e.Text, 0))
                e.Handled = true;

            if ((e.Text.IndexOf('.') == 0 || e.Text.IndexOf(',') == 0) && ((TextBox)sender).Text.IndexOf('.') == -1 && ((TextBox)sender).Text.IndexOf(',') == -1)
                e.Handled = false;
        }

        private void TxbxDitgitPreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if (!Char.IsDigit(e.Text, 0))
                e.Handled = true;
        }
        #endregion
    }
}
